package org.example.cake.common;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description:
 * @Author: luojiangjin
 * @Date: 2025/7/24 11:29
 */
public class Repsecond {
    /**
     * 响应状态码，默认200表示成功
     */
    private int code = 200;

    /**
     * 响应消息，默认"成功"
     */
    private String msgerr = "成功";

    /**
     * 文件/图片URL（用于上传等操作）
     */
    private String url;

    /**
     * 响应数据容器
     */
    private Map<String, Object> data = new HashMap<>();

    // ============== 链式调用方法 ==============

    /**
     * 设置状态码
     * @param code HTTP状态码
     * @return 当前对象
     */
    public Repsecond setCode(int code) {
        this.code = code;
        return this;
    }

    /**
     * 设置响应消息
     * @param msgerr 消息内容
     * @return 当前对象
     */
    public Repsecond setMsgerr(String msgerr) {
        this.msgerr = msgerr;
        return this;
    }

    /**
     * 设置URL（用于文件上传等场景）
     * @param url 文件路径
     * @return 当前对象
     */
    public Repsecond setUrl(String url) {
        this.url = url;
        return this;
    }

    /**
     * 添加响应数据
     * @param key 数据键
     * @param value 数据值
     * @return 当前对象
     */
    public Repsecond addData(String key, Object value) {
        this.data.put(key, value);
        return this;
    }

    // ============== 快捷方法 ==============

    /**
     * 快速创建成功响应（带数据）
     * @param key 数据键
     * @param value 数据值
     * @return 响应对象
     */
    public static Repsecond success(String key, Object value) {
        return new Repsecond().addData(key, value);
    }

    /**
     * 快速创建成功响应（仅消息）
     * @param message 成功消息
     * @return 响应对象
     */
    public static Repsecond successMsg(String message) {
        return new Repsecond().setMsgerr(message);
    }

    /**
     * 快速创建错误响应
     * @param code 错误码
     * @param message 错误消息
     * @return 响应对象
     */
    public static Repsecond error(int code, String message) {
        return new Repsecond()
                .setCode(code)
                .setMsgerr(message);
    }

    /**
     * 快速创建服务器错误响应
     * @param message 错误消息
     * @return 响应对象
     */
    public static Repsecond serverError(String message) {
        return error(500, message);
    }

    /**
     * 快速创建客户端错误响应
     * @param message 错误消息
     * @return 响应对象
     */
    public static Repsecond clientError(String message) {
        return error(400, message);
    }

    /**
     * 快速创建未找到资源响应
     * @param message 错误消息
     * @return 响应对象
     */
    public static Repsecond notFound(String message) {
        return error(404, message);
    }
}
